// request.js - 封装axios请求配置

const BASE_URL = window.location.origin;
const TIMEOUT = 15000; // 15秒超时

// 创建axios实例
const request = axios.create({
    baseURL: BASE_URL,
    timeout: TIMEOUT,
    withCredentials: true
});

// 请求拦截器
request.interceptors.request.use(
    config => {
        // 可以在这里添加loading状态
        // 添加token等通用header
        return config;
    },
    error => {
        return Promise.reject(error);
    }
);

// 响应拦截器
request.interceptors.response.use(
    response => {
        const res = response.data;
        // 这里可以根据后端的数据格式统一处理返回值
        if (res.code === 200) {
            return res.data;
        }
        // 处理特定的错误码
        if (res.code === 401) {
            // 未登录或token过期
            if (!window.location.pathname.includes('/login.html')) {
                window.location.href = '/login.html?redirect=' + encodeURIComponent(window.location.href);
            }
        }
        return Promise.reject(new Error(res.message || '请求失败'));
    },
    error => {
        // 处理HTTP错误状态
        if (error.response) {
            switch (error.response.status) {
                case 401:
                    // 未授权处理
                    if (!window.location.pathname.includes('/login.html')) {
                        window.location.href = '/login.html?redirect=' + encodeURIComponent(window.location.href);
                    }
                    break;
                case 403:
                    console.error('没有权限访问该资源');
                    break;
                case 404:
                    console.error('请求的资源不存在');
                    break;
                case 500:
                    console.error('服务器内部错误');
                    break;
                default:
                    console.error('未知错误');
            }
        }
        return Promise.reject(error);
    }
);

export default request;
